`yaeju1205/nvim-plugin-manager` 레포지토리에 관한 글입니다
저는 neovim 을 구성할때 플러그인을 사용하기 위하여 이전에는
lazy.nvim 을 사용하여 구성하였습니다 
하지만 그러다보니 점점 더 neovim 이 무거워지는 기분이라서 제가 직접 관리하기로 마음 먹었습니다

플러그인 메니저를 만든것은 이번이 처음이 아니였습니다
`yaeju1205/nvim-config` (이전의 구성) 을 보면 여기서도 플러그인 메니저를 직접 구현해서 사용중이였습니다
하지만 처음 설계의 문제로 비동기 설치, 버전관리, neovim reload 등의 구현이 쉽지 않았습니다

그래서 다시 만들게 된것이 `nvim-plugin-manager` 입니다
nvim-plugin-manager 는 기존의 구현했던 플러그인 메니저보다 한단계 더 빠르고 관리하기 쉬우며 단일 파일로 이루어져 있습니다
예전의 구현과 다른점들은

1. 설치를 비동기화 시켰습니다
기존의 구현은 git process 를 실행시키고 스레드를 기다려야만 설치가 완료 되는 형식이였습니다
이러한부분을 `vim.schedule` 함수를 사용하여 비동기적으로 처리하였습니다
neovim 0.11.0 이상의 버전에서는 기존의 `vim.fn.system` 이 아닌 `vim.system` 을 사용하며
성능과 비동기를 더욱 확실하게 잡았습니다

2. runtimepath 를 직접 지정함과 플러그인 저장 위치 변경
기존의 구현은 `[neovim 의 std data path]/site/pack/**/opt` 를 사용하여 runtimepath (줄여서 rtp) 를 지정하지않고
기본 neovim 이 지정한 rtp 를 사용하였습니다 또한 기존의 구조에서는 `opt` 디렉토리에 레포지토리 이름으로만 저장을 했지만
하지만 세로운 구현에서는 `[neovim 의 std data path]/plugin` 에 디렉토리를 하나 만들고
거기에 `[git scope]/[user name]/[repo name]` 형식으로 git 레포지토리를 클론합니다
이러한 구조의 장점은 이름이 겹치는 플러그인을 관리할수 있고 관리하기 더욱 수월합니다
또한 `[git scope]/[user name]/[repo name]` 에 대해서 rtp 를 추가합니다

3. 구조적 변경
기존의 구현은 install 할때의 버전이나 브렌치 등을 저장하지 못하여 플러그인을 업데이트 할때에
install 할때와 동일한 조건으로 업데이트를 하지 못한다는 문제점이 있었습니다
하지만 세로운 구현에서는 플러그인의 스펙들을 모아둔 테이블을 하나 만들어두고 install 할때마다 스펙을 저장하도록 변경하였습니다
이러한 구조 변경을 통하여 업데이트와 리로드를 구현할수 있게 되었습니다